package com.example.search.thread;

import java.util.concurrent.*;

/**
 * 多线程测试类
 */
public class ThreadTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //
//
//
//        // 1.测试callable，配合FutureTask（本质也是runnable）
//        FutureTask<Integer> futureTask = new FutureTask<>(new MyCallable());// 【new FutureTask<>(new MyRunnable(), result)】可以接受runnable的返回值
//        new Thread(futureTask).start();
//        //System.out.println(futureTask.get());// 阻塞等待异步执行结束获取结果
//
//        // 2.创建一个固定线程数的线程池，执行异步任务
//        ExecutorService pool = Executors.newFixedThreadPool(10);// 使用了线程池，所以当前程序不会结束
//        Future<?> future = pool.submit(new MyCallable());
//        System.out.println("future: " + future.get());
//
//        // 3.创建一个原生线程池
//        new ThreadPoolExecutor(5,
//                200,
//                10,
//                TimeUnit.SECONDS,
//                new LinkedBlockingDeque<>(100000),
//                Executors.defaultThreadFactory(),
//                new ThreadPoolExecutor.CallerRunsPolicy());
//
//        // 4.创建常用的4种线程池
//        ExecutorService executor = Executors.newFixedThreadPool(10);// 使用了线程池，所以当前程序不会结束
//        Executors.newCachedThreadPool();
//        Executors.newScheduledThreadPool(10);
//        Executors.newSingleThreadExecutor();
//
//
    }

}
